有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何按频率而不是字母顺序排列字符串数组

String[] stringArray = {"x", "y", "z", "x", "x", "y", "a"};

final Map<String, Integer> counter = new HashMap<String, Integer>();
for (String str : stringArray)
    counter.put(str, 1 + (counter.containsKey(str) ? counter.get(str) : 0));

List<String> list = new ArrayList<String>(counter.keySet());
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String x, String y) {
        return counter.get(y) - counter.get(x);
    }
});

for (String string : list) {
System.out.println(string)
}

按照每个字符串的频率将其排序为较小的集合的最快/最有效的方法是什么

我试着使用一个HashMap,这很有效,但是,我希望它显示["x", "y", "z", "a"],而不是显示["x", "y", "a", "z"]。我只希望列表按频率排序,而不是按字母顺序排序

谢谢,我附上了我的代码来展示我所做的


共 (1) 个答案

  1. # 1 楼答案

    compare()方法主体替换为以下内容:

    if (!counter.get(y).equals(counter.get(x))) 
        return counter.get(y) - counter.get(x);
    return x.compareTo(y);